from abc import ABC, abstractmethod
from pathlib import Path
from typing import Dict, Optional


class BaseTTSEngine(ABC):
    """
    TTS引擎基类，所有具体TTS引擎实现都应继承此类
    """
    
    def __init__(self, config: Optional[Dict] = None):
        self.config = config or {}
        self.initialized = False
    
    @abstractmethod
    def initialize(self) -> bool:
        """
        初始化TTS引擎
        
        Returns:
            bool: 初始化是否成功
        """
        pass
    
    @abstractmethod
    def synthesize(self, text: str, output_path: Path, lang: str = "en") -> bool:
        """
        将文本合成为语音文件
        
        Args:
            text: 要合成的文本
            output_path: 输出文件路径
            lang: 语言代码，默认为英语"en"
            
        Returns:
            bool: 合成是否成功
        """
        pass
    
    @abstractmethod
    def is_available(self) -> bool:
        """
        检查引擎是否可用
        
        Returns:
            bool: 引擎是否可用
        """
        pass
    
    @abstractmethod
    def get_name(self) -> str:
        """
        获取引擎名称
        
        Returns:
            str: 引擎名称
        """
        pass
    
    def cleanup(self):
        """
        清理资源，在引擎不再使用时调用
        子类可选择性实现
        """
        pass